﻿#ifndef CRobAlarmDlg_H
#define CRobAlarmDlg_H
/********************************************************************************
** @ Date:2024/04/10
** @ Author: HanJiaXin
** @ Description:机器人报警提示对话框
** @ Version:1.0.0
** @ ClassName:CRobAlarmDlg
** @ Fun:
********************************************************************************/
#include <QDialog>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>
#include <QDateTime>
#include <qfile.h>
#include "ui_CRobAlarmDlg.h"
#include "CRobCtrMange.h"
//设备状态
enum enumDeviceStatus
{
	enAlarm1 = 1,             //RFID报警
	enAlarm2,                 //RFID通讯报警
	enAlarm3,                 //设备刚上电未校零
	enAlarm4,                 //急停被按下故障
	enAlarm5,                 //低压禁止充放电故障
	enAlarm6,                 //放电过流保护
	enAlarm7,                 //软件锁定MOS
	enAlarm8,                 //前端检测IC错误
	enAlarm9,                 //充电器通讯故障
	enAlarm10,                //充电过温保护
	enAlarm11,                //充电低温保护
	enAlarm12,                //充电过流保护
	enAlarm13,                //放电过温保护
	enAlarm14,                //放电低温保护
	enAlarm15,                //整组过压保护
	enAlarm16,                //整组欠压保护
	enAlarm17,                //电机报警
	enAlarm18,                //电机通讯故障
	enAlarm19,                //行走电机电流过大故障
	enAlarm20,                //行走电机力矩过大故障
	enAlarm21,                //到达前进限位故障
	enAlarm22,                //到达后退限位故障
	enAlarm23,                //单体过压保护
	enAlarm24,                //单体欠压保护
	enAlarm25,                //电池通讯故障
	enAlarm26,                //电池短路保护故障
	enAlarm27,                //电池低电量故障
	enAlarm28,                //电池电压异常
	enAlarm29,                //电池温度异常
	enAlarm30,                //电池过流报警
	enAlarm31,                //电池模块故障
	enAlarm32,                //短路保护
	enAlarm33,                //升降电机报警
	enAlarm34,				  //冲洗设备异常
	enAlarm300 = 300,         //非充电位长时间停留报警add
	enAlarm301,               //驱动电机温度过高故障add
	enAlarm302,               //升降电机温度过高故障add
	enAlarm303,               //循环充电失败add
	enAlarm304,               //前雷达避障报警
	enAlarm305,				  //后雷达避障报警
	enAlarm306,               //云台避障报警
};

struct SRobAlarm
{
	enumDeviceStatus m_eDeviceStatus;//报警类型
	bool m_bIsWirteLog;//报警发生后是否已经写入日志中
	QString m_sAlarmName;//报警名
	QDateTime m_dtAlarmTime;
	SRobAlarm()
	{
		m_sAlarmName = "";
		m_bIsWirteLog = false;
	}
};

//警报动画结构体
struct structAlarmAnima
{
	QGraphicsOpacityEffect* pOpacity;  //透明度对象
	QPropertyAnimation* pAnimation;    //动画对象
	structAlarmAnima()
	{
		pOpacity = nullptr;
		pAnimation = nullptr;
	}
};

class CRobAlarmDlg : public QDialog
{
	Q_OBJECT

public:
	CRobAlarmDlg(CRobCtrMange* pRobCtrMange, CDevDataBase* pDevData,QWidget *parent = nullptr);
	~CRobAlarmDlg();
private:
	void setStyleSheetFile();													 //设置界面的样式表
	void initConnect();															 //初始化槽函数连接
	void setAlarm(enumDeviceStatus enDeviceStatus, bool bIsAlarm);               //设置报警
	void initAnima(enumDeviceStatus enStatusStatus, QLabel* pBatteryStatus);     //初始化动画绑定
	void setAlarmAnima(QPropertyAnimation* pAnimation);                          //设置报警的动画
	void setNotAlarmAnima(QPropertyAnimation* pAnimation);                       //设置未报警动画
	void resetError();                                                           //复位错误
	QString getErrLog(enumDeviceStatus enStatusStatus);		                     //获取报警日志描述
	void addAlarm(SRobAlarm stRobAlarm);				                         //增加报警
	void delAlarm(enumDeviceStatus enRobAlarm);				                     //减少报警
	//void addFauitAlarm(enumDeviceStatus enDeviceStatus, bool bIsAlarm);          //添加光字牌报警
public slots:
	void slotDataRefresh();          //定时器刷新
	void slotPushButtonErrorReset(); //报警复位
	void slotPushButtonClose();      //点击关闭按钮
signals:
	void sigAlarm(bool bIsAlarm);
private:
	Ui::CRobAlarmDlgClass ui;
	CRobCtrMange *m_pRobCtrMange;               //设备操作管理类对象
	CDevDataBase * m_pDevDataRob;				//机器人设备数据类
	QString m_sDevGuid;                         //机器人GUID
	QTimer* m_pTimer;							//刷新数据定时器
	int m_nUpAlramCount;                        //更新光之牌报警计数    
	QThread *m_pThread;                         
	QMap<enumDeviceStatus, structAlarmAnima> m_mapAlarmAnima;//警报对应动画集合
	QMap<enumDeviceStatus,SRobAlarm> m_mapAlarm;             //当前发生报警的集合
};

#endif
